Twilio を使用した Django SMS 通知システムの構築
こんにちは、チャールです。
こちらのブログでは、Twilio を使用して SMS 通知を送信する Django アプリケーションを構築します。ユーザー、イベントタイプ、およびイベントを管理し、イベントの1時間前に通知を送信します。また、Twilio の認証情報などの機密情報を管理するために .env ファイルを使用します。
ステップ1:
まず、新しいDjangoプロジェクトとアプリを作成してください。
django-admin startproject sms_alerts
cd sms_alerts
django-admin startapp alerts
ステップ2:
Twilioパッケージと__django-environ__をインストールして、環境変数を管理してください。
pip install twilio django-environ
ステップ3:
sms_alerts/settings.pyのINSTALLED_APPSにalertsを追加してください。
INSTALLED_APPS = [
...
'alerts',
]
ステップ4:
プロジェクトのルートディレクトリ(manage.pyがある場所)に.envファイルを作成してください。.envファイルにTwilioの認証情報とTwilioの電話番号を追加してください。
TWILIO_ACCOUNT_SID=your_account_sid
TWILIO_AUTH_TOKEN=your_auth_token
TWILIO_PHONE_NUMBER=your_twilio_phone_number
ステップ5:
alerts/models.pyでモデルを定義してください。
from django.db import models
class EventType(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class User(models.Model):
phone_number = models.CharField(max_length=15, unique=True)
def __str__(self):
return self.phone_number
class Event(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
event_type = models.ForeignKey(EventType, on_delete=models.CASCADE)
event_time = models.DateTimeField()
def __str__(self):
return f"{self.event_type.name} for {self.user.phone_number} at {self.event_time}"
データベースにテーブルを作成するためにマイグレーションを実行してください。
python manage.py makemigrations
python manage.py migrate
ステップ6:
Django管理インターフェースで管理できるように、alerts/admin.pyでモデルを登録してください。
from django.contrib import admin
from .models import User, Event, EventType
admin.site.register(User)
admin.site.register(Event)
admin.site.register(EventType)
ステップ7:
Twilioを使用してSMSメッセージを送信するために、alerts/services.pyを作成してください。
import os
from twilio.rest import Client
import environ
env = environ.Env()
environ.Env.read_env(os.path.join(os.path.dirname(__file__),'../.env'))
TWILIO_ACCOUNT_SID = env('TWILIO_ACCOUNT_SID')
TWILIO_AUTH_TOKEN = env('TWILIO_AUTH_TOKEN')
TWILIO_NUMBER = env('TWILIO_NUMBER')
def send_sms(phone_number, message):
client = Client(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
message = client.messages.create(body=message, from_=TWILIO_NUMBER, to=phone_number)
return message.sid
ステップ8:
定期的に通知をチェックして送信するために、カスタムのDjango管理コマンドを作成してください。
mkdir -p alerts/management/commands
touch alerts/management/commands/send_notifications.py
send_notifications.pyに以下のコードを追加してください:
import time
from django.core.management.base import BaseCommand
from datetime import timedelta
from django.utils import timezone
from ...models import Event
from ...services import send_sms
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class Command(BaseCommand):
help = 'Run the scheduler to send notification 1 hour before the event time'
def handle(self, *args, **kwargs):
while True:
now = timezone.now()
one_hour_later = now + timedelta(hours=1)
events = Event.objects.filter(event_time__range=(now, one_hour_later))
if not events.exists():
logger.info("No events exists")
for event in events:
message = f"Reminder: You have a {event.event_type.name} at {event.event_time}"
try:
send_sms(event.user.phone_number, message)
logger.info(f'Successfully sent reminder to {event.user.phone_number}')
except Exception as e:
logger.error(f'Failed to sent reminder to {event.user.phone_number}')
time.sleep(60)
ステップ9:
Django管理インターフェースにアクセスするためのスーパーユーザーを作成し、プロンプトに従ってください。
python manage.py createsuperuser
ステップ10:
Django開発サーバーを起動してください。
python manage.py runserver
新しいターミナルでスケジューラーコマンドを実行してください。
python manage.py send_notifications
ステップ11:
- Djangoの管理インターフェースにアクセスしてください。URLは http://127.0.0.1:8000/admin/ です。
- 管理者の資格情報でログインしてください。
- 管理インターフェースを通じて、ユーザー、イベントタイプ、イベントを追加してください。
まとめ:
これらのステップに従うことで、Twilioを使用してSMS通知を送信するDjangoアプリケーションを作成しました。Django管理インターフェースを通じてユーザー、イベントタイプ、イベントを管理し、イベントの1時間前に通知を送信できます。
ありがとうございます!